#include <iostream>
#include <sys/types.h>
#include <sys/ipc.h>
#include <cstdio>
#include <cstdlib>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <cstdbool>
#include <unistd.h>
//using namespace std;

// int main(int,char**,char**)
// {
//     key_t key =ftok("./shm.cxx",0333);
//     // if(key==-1)
//     // {
//     //     perror("ftok");
//     //     exit(1);
//     // }

//     int shmid=shmget(key,4096,IPC_CREAT|IPC_EXCL|0666);
//     // if(shmid==-1)
//     // {
//     //     perror("shmget");
//     //     exit(1);
//     // }

//     // 挂载
//     char* shmaddr=(char*)shmat(shmid,nullptr,0);
    
//     shmaddr[0]='a';

//     // 共享内存越界会怎么样？？
    
//     // 正常访问
//     //fprintf(stdout,"%c",shmaddr[0]);
    
//     // 越界访问---段错误
//     shmaddr[4096]='z';
//     fprintf(stdout,"%c\n",shmaddr[4096]);

//    // while(true)
//    // {
//    //     
//    // }

//     // 脱离
//     int ret=shmdt(shmaddr);

//     //ret=1;
//     ret = shmctl(shmid,IPC_RMID,nullptr);

//     return 0;
// }
////////////////////////////////////////////////////////////////////////////
/*
扑克牌中的顺子
class Solution {
public:
    bool isStraight(vector<int>& nums) {

        int minVal=14;
        int maxVal=0;

        set<int> s;

        for(auto e: nums)
        {
            if(e==0)
                continue;

            if(minVal>e)
                minVal=e;
            if(maxVal<e)
                maxVal=e;
            if(!s.empty() && s.find(e)!=s.end())
            {
                return false;
            }
            s.insert(e);
        }

        return maxVal-minVal<5;
    }
};
class Solution {
public:
    bool isStraight(vector<int>& nums) {
        std::sort(nums.begin(),nums.end());

        size_t joker=0;

        for(int i=0;i<nums.size()-1;i++)
        {
            if(nums[i]==0)
            {
                joker++;
            }
            else if(nums[i+1]==nums[i])
            {
                return false;
            }
        }
        return nums[4]-nums[joker]<5;
    }   
};
*/

// #include <string>
// #include <algorithm>
// #include <functional>
// #include <vector>
// int main(int,char**,char**)
// {
//     // std::string str="3303459";

//     // std::sort(str.begin(),str.end());
    
//     // std::cout<<str<<std::endl; // 0333459

//     std::vector<std::string> vStr={
//         {"3"},{"30"},{"34"},{"5"},{"9"}
//     };

//     std::sort(vStr.begin(),vStr.end());

//     std::string str;

//     for(const auto& e:vStr)
//     {
//         str+=e;
//     }

//     std::cout<<str<<std::endl;

//     return 0;
// }

//把数组排成最小的数
// err
// class Solution {
// public:
//     string minNumber(vector<int>& nums) {
//         std::string str;

//         for(auto e:nums)
//         {
//             str+=to_string(e);
//         }

//         // 没有将整个数进行排序，会出错---20 1 -> 120 corr -> 102 err 
//         std::sort(str.begin(),str.end());

//         size_t i=0;

//         for(i=0;i<str.size();i++)
//         {
//             if(str[i]!='0')
//                 break;
//         }

//         if(i<str.size())
//             std::swap(str[0],str[i]);

//         return str;
//     }
// };
// err
// class Solution {
// public:
//     string minNumber(vector<int>& nums) {

//         std::vector<std::string> vStr;

//         for(auto e:nums)
//         {
//             vStr.push_back(to_string(e));
//         }

//         std::sort(vStr.begin(),vStr.end());

//         std::string str;

//         for(const auto& e:vStr)
//         {
//             str+=e;
//         }

//         //[3,30,34,5,9] --> err"3303459" ---> corr"3033459" 
//         return str;
//     }
// };
// class Solution {
// public:
//     string minNumber(vector<int>& nums) {

//         std::vector<std::string> vStr;

//         for(auto e:nums)
//         {
//             vStr.push_back(to_string(e));
//         }

//         std::sort(vStr.begin(),vStr.end(),[](const std::string& s1,const std::string& s2)->bool{
//             std::string str1=s1+s2;
//             std::string str2=s2+s1;

//             return str1<str2;
//         });

//         std::string str;

//         for(const auto& e:vStr)
//         {
//             str+=e;
//         }

//         //[3,30,34,5,9] --> err"3303459" ---> corr"3033459" 
//         return str;
//     }
// };